package com.xzit.rental.config;

import com.xzit.rental.utils.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

// 该注解标记这个类是一个全局的基于 RESTful 风格的异常处理类，
// 它可以对整个 Spring Web 应用中的控制器（@Controller或@RestController标记的类）抛出的异常进行统一处理，
// 相当于一个集中的异常拦截和处理的 “关卡”，能够避免在每个控制器方法中都去编写重复的异常处理代码，提高代码的可维护性。
@RestControllerAdvice
// 在编译阶段，Lombok会自动为这个类生成一个名为log的静态日志对象，通过这个对象就能方便地调用相应日志框架
// （比如Logback等）的方法来记录不同级别的日志，在这个类中主要用于记录异常相关的日志信息。
@Slf4j
public class GlobalException {

    /**
     * 处理所有继承自Exception的异常
     * @param e 抛出的异常对象
     * @return 返回一个表示操作失败的结果（Result）对象，其中包含异常信息
     */
    @ExceptionHandler(value = Exception.class)
    public Result handleException(Exception e) {
        // 记录异常信息到日志
        log.error("异常信息：{}",e.getMessage());
        // 异常的堆栈信息输出到标准错误流（例如控制台等）
        e.printStackTrace();
        // 返回一个包含处理结果信息的对象给到调用方（通常是前端等客户端）
        return Result.fail().setMessage(e.getMessage());
    }

}
